package com.h.ioc;

import com.h.ioc.component.UserComponent;
import com.h.ioc.configuration.UserConfiguration;
import com.h.ioc.controller.HController;
import com.h.ioc.controller.HelloController;
import com.h.ioc.model.Student;
import com.h.ioc.repository.UserRepository;
import com.h.ioc.service.UserService;
import org.apache.catalina.core.ApplicationContext;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;

// 有两类注解实现 Bean的存储让 spring进行管理
// 类的注解：@Controller @Service @Repository @Component @Configuration
// 方法的注解：@Bean
// 都是存储到ApplicationContext 应用上下文，里面的是 Spring的环境变量

@SpringBootApplication
public class SpringIocApplication {

	public static void main(String[] args) {
		ConfigurableApplicationContext context =  SpringApplication.run(SpringIocApplication.class, args);
//		//获取对象三种方法：
//		// 方法1：
		// 适合该类型的对象只有一个
//		HelloController bean1 = context.getBean(HelloController.class);
//		bean1.print();
//		// 方法2：
//		// 这个类名当两个大写字母不紧挨的话，就第一个小写第二个大写
//		HelloController bean2 = (HelloController) context.getBean("helloController");
//		bean2.print();
//		// 方法3：
//		HelloController bean3 = context.getBean(HelloController.class,"helloController");
//		bean3.print();
//
//		System.out.println(bean1);
//		System.out.println(bean2);
//		System.out.println(bean3);

//		HelloController bean2 = (HelloController) context.getBean("HelloController");
//    	bean2.print();

//		HController bean4 = (HController) context.getBean("HController");
//		bean4.print();

//		UserService bean5 = context.getBean(UserService.class);
//		bean5.print();
//		UserRepository bean6 = context.getBean(UserRepository.class);
//		bean6.print();
//		UserComponent bean7 = context.getBean(UserComponent.class);
//		bean7.print();
//		UserConfiguration bean8 = context.getBean(UserConfiguration.class);
//		bean8.print();

		//@Bean的使用
//		//这个时候就不能使用和这个方法进行取对象了，因为是两个Student方法，不知道是取哪个
//		Student bean = context.getBean(Student.class);
//		System.out.println(bean);

//		Student bean1 = (Student) context.getBean("s1");
//		System.out.println(bean1);
//		Student bean1 = (Student) context.getBean("student1");
//		System.out.println(bean1);
//
//		Student bean2 = (Student) context.getBean("s2");
//		System.out.println(bean2);

		//DI测试
//		HelloController bean = context.getBean(HelloController.class);
//		bean.print();

	}
}
